package io.tec.cloud.algorithm.c01_v20220601;

/**
 * 1 1~0
 * 2 2-0
 * ...
 * N-1 N-1~0
 * <p>
 * 依次和左边的数字比较，如果小于则交换；
 * 直到左边没有数字或者不小于左边的数字
 */
public class InsertionSort {

    public static void main(String[] args) {
        int[] arr = {-1, 7, -4, -2};
        SortTestUtil.p(arr);
        sort(arr);
        SortTestUtil.p(arr);
    }

    public static int[] sort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return arr;
        }
        for (int i = 1; i < arr.length; i++) {
            for (int j = i - 1; j >= 0 && arr[j] > arr[j + 1]; j--) {
                swap(arr, j, j + 1);
            }
//            int j = i - 1;
//            while (j >= 0) {
//                if (arr[j] > arr[j + 1]) {
//                    swap(arr, j, j + 1);
//                }
//                j--;
//            }
        }
        return arr;
    }

    private static void swap(int[] arr, int j, int i) {
        arr[i] = arr[i] ^ arr[j];
        arr[j] = arr[i] ^ arr[j];
        arr[i] = arr[i] ^ arr[j];
    }



    public static void insertionSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return ;
        }

        for (int i = 1; i < arr.length; i ++) {
            for(int j = i -1; j >=0 && arr[j] > arr[j+1]; j--) {
                swap(arr, j, j+1);
            }
        }
    }
}
